﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 实时曲线.Models;

namespace 实时曲线
{
    public class CommonClass
    {
        /// <summary>
        /// 参数名-参数描述 键值对
        /// </summary>
        // 未必能按照添加初始化时的保证顺序
        //public static Dictionary<string, string> trendParaInfos = new Dictionary<string, string>();

        /**
        *  List<(string, string)> 匿名元组 等价于 ValueTuple<string, string>。
        *  List<(string ParaName, string Note)> 命名元组(带语义化名称的元组，代码清晰)
        *  是 C# 中的元组（Tuple）类型，更准确地说，是 值元组（ValueTuple）。
        *  从 C# 7.0 开始，C# 引入了 值元组（System.ValueTuple），它比旧的 System.Tuple 更高效（结构体 vs 类），语法也更简洁。
        *  内存中是 结构体（struct），性能好。
        *  编译后，(string ParaName, string Note) 会被编译成 ValueTuple<string, string>。
        *  字段名 ParaName 和 Note 会通过 元数据特性（[TupleElementNames]） 保留在程序集中，供调用方读取。
        *  所以，字段名是“编译时”的语义，运行时类型仍然是 ValueTuple<string, string>。
        *              写法	                    是否是元组	              说明
        *       (string, string)	              ✅ 是	        匿名字段的值元组
        *       (string ParaName, string Note)	  ✅ 是	        带字段名的值元组，推荐用于提高可读性
        *       List<(string, string)>	          ✅ 是	        存储元组的列表
        *       这样既能保证插入顺序，又能通过 .ParaName 和 .Note 访问字段，代码清晰、性能好、类型安全。
        */

        /// <summary>
        /// 参数名-参数描述 键值对
        /// </summary>
        // 能保证按照添加初始化时的顺序按照添加的顺序
        public static List<(string ParaName, string Note)> trendParaInfos = new List<(string ParaName, string Note)>();

        //// 或者 能保证顺序
        //public static List<(string, string)> trendParaInfos1 = new List<(string, string)>();


        //// 或者 能保证顺序
        //public static List<KeyValuePair<string, string>> trendParaInfos2 = new List<KeyValuePair<string, string>>();

        //public CommonClass()
        //{
        //    trendParaInfos1.Add(("key", "value"));
        //    string str = trendParaInfos1.FirstOrDefault(a => a.Item1 == "key").Item1;

        //    trendParaInfos2.Add(new KeyValuePair<string, string>("key", "value"));
        //    string str2 = trendParaInfos2.FirstOrDefault(a => a.Key == "key").Key;
        //}

        /// <summary>
        /// 存储曲线缓存数据
        /// </summary>
        public static List<List<TrendCacheInfo>> trendCacheInfos = new List<List<TrendCacheInfo>>();

        /// <summary>
        /// 缓存容量
        /// </summary>
        public static int trendCacheCount = 600;
    }
}
